home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs29.d81
/
sidst2.arc
/
ENH SID FORMAT.T
< prev
next >
Wrap
Text File
|
2009-10-10
|
16KB
|
293 lines
*****************************************************************************
* ╙╔─╨╠┴┘┼╥ ═╒╙╔├ ╞╔╠┼ ├╧╬╘┼╬╘╙ *
* ╔NCLUDING ┼NHANCED ┼DITOR ├OMMANDS *
* ┬Y ─ICK ╘HORNTON *
*****************************************************************************
╙╔─╨╠┴┘┼╥ MUSIC FILES ARE ╨╥╟ TYPE FILES WHICH CONTAIN THE MUSICAL NOTES AND
COMMAND DIRECTIVES FOR PLAYING A SONG, AS WELL AS THE SEVERAL TEXT LINES
INTENDED FOR THE SONG NAME AND CREDIT LINES FOR THE COMPOSER AND ╙╔─
ARRANGER.
╧N DISK, THE FILE CONSISTS OF ONE OR MORE SECTORS WRITTEN IN STANDARD ╨╥╟
FORMAT. ├HARACTERISTICS OF THIS FILE TYPE CAN BE FOUND IN YOUR DISK MANUAL, OR
OTHER BOOKS ON DISK FILE MANAGEMENT. ╞ROM HERE ON, WE WILL CONSIDER THE FILE
DATA AS IT RESIDES IN MEMORY AFTER BEING ╠╧┴─'ED. ╘HE GENERAL FORMAT OF THE
.═╒╙ FILE IN MEMORY IS:
(1) ╘WO-BYTE LENGTH OF VOICE 1 IN LOW-BYTE, HIGH-BYTE FORM.
(2) ╘WO-BYTE LENGTH OF VOICE 2 IN LOW-BYTE, HIGH-BYTE FORM.
(3) ╘WO-BYTE LENGTH OF VOICE 3 IN LOW-BYTE, HIGH-BYTE FORM.
(4) ╘HE DATA FOR VOICE 1 ALWAYS ENDING WITH A ╚╠╘ COMMAND.
(5) ╘HE DATA FOR VOICE 2 ALWAYS ENDING WITH A ╚╠╘ COMMAND.
(6) ╘HE DATA FOR VOICE 3 ALWAYS ENDING WITH A ╚╠╘ COMMAND.
(7) ╘HE TEXT LINES FOR SONG NAME, ETC. ╘HERE ARE FIVE LINES, EACH
CONTAINING 0-32 BYTES AND ENDING WITH A CARRIAGE RETURN. ╘HE TEXT DATA
INFORMATION IS IN UPPER-CASE ├OMMODORE ╨ET ┴╙├╔╔. ┴ HEX ZERO BYTE
FOLLOWS THE LAST BYTE OF THE LAST LINE OF TEXT.
╘HE EFFECT OF THIS IS THAT EACH .═╒╙ FILE IS ACTUALLY FOUR FILES PACKED END-
TO-END IN A SINGLE ╨╥╟ FILE WITH THREE LITTLE TWO-BYTE LENGTHS IN THE FRONT TO
HELP YOU FIND THINGS. ╓OICE 1 BEGINS AT THE SIXTH BYTE OF THE DATA FILE AS
╠╧┴─'ED INTO MEMORY. ╓OICE 2 STARTS AT A POINT 6 + LENGTH OF VOICE 1 FROM THE
BEGINNING OF THE FILE IN MEMORY. ╓OICE 3 IS AT 6 + LENGTH OF VOICE 1 + LENGTH
OF VOICE 2 FROM THE FILE START, AND THE TEXT LINES BEGIN AT 6 + LENGTH OF
VOICE 1 + LENGTH OF VOICE 2 + LENGTH OF VOICE 3. ┼ACH VOICE ENDS WITH A ╚╠╘
COMMAND (HEX 014╞), AND IF THERE IS NO DATA FOR A VOICE THAT IS ALL IT WILL
CONTAIN. ╘HE TEXT AREA ENDS WITH A HEX ZERO AFTER THE CARRIAGE RETURN FOR THE
FINAL LINE.
┼ACH VOICE CONTAINS DATA IN TWO-BYTE PAIRS THAT CONTAIN THE MUSICAL NOTES AND
COMMANDS NEEDED TO PLAY THE SONG. ╘HE FIRST BYTE OF EACH PAIR WILL HAVE BITS 1
AND 0 BOTH SET TO ZERO IF THE BYTE-PAIR DESCRIBES A MUSICAL NOTE, OTHERWISE
THE BYTE-PAIR DESCRIBES A ╙╔─ CHIP COMMAND OR ╙╔─╨╠┴┘┼╥ COMMAND.
╔N THE FOLLOWING, COMMANDS ARE IDENTIFIED BY THE THREE CHARACTER ABBREVIATION
USED BY THE ╙╔─ ┼─╔╘╧╥ PROGRAM DESCRIBED IN THE BOOKS "┴LL ┴BOUT THE ├OMMODORE
64" ╓OLUME 2, AND "├╧═╨╒╘┼!'S ═USIC ╙YSTEM FOR THE ├OMMODORE 128 AND 64". ┬OTH
BOOKS ARE PUBLISHED BY ├╧═╨╒╘┼! ┬OOKS.
*****************************************************************************
* ═╒╙╔├┴╠ ╬╧╘┼ ─┴╘┴ ╨┴╔╥╙ *
*****************************************************************************
═USICAL NOTE DATA PAIRS WILL CONTAIN 00 IN THE LOWER-ORDER TWO BITS OF THE
FIRST BYTE OF THE PAIR. ┼ACH MUSICAL NOTE BYTE-PAIR CONTAINS DURATION IN ITS
FIRST BYTE, AND FREQUENCY (PITCH) IN THE SECOND. ╘HIS DATA IS CODED AS
FOLLOWS, WHERE DECODING PROCEEDS DOWNWARD UNTIL A > TERMINATOR IS FOUND. ┴ DOT
MEANS THE BIT CAN BE EITHER 0 OR 1:
*****************************************************************************
* ┬┘╘┼ 1 - ╘╔┼ ┴╬─ ─╒╥┴╘╔╧╬ *
*****************************************************************************
┬╔╘╙
7654 3210 ─┼╙├╥╔╨╘╔╧╬ ----------------------------
0000 0000 ┴BSOLUTE ╨ITCH> ! ┼╪┴═╨╠┼ !
.1.. ..00 ╘IE/╙LUR ! !
1.10 0000 ╘RIPLET 64TH NOTE> ! ╟╔╓┼╬ BYTE 1 = HEX ╞0 !
..10 0100 ╒TILITY ╓OICE> ! (BINARY 1111 0000) !
1.0. ..00 ╘RIPLET ! TIE .1.. ..00 !
..00 0100 ╒TILITY ─URATION> ! DOTTED ..1. .... !
...0 0000 64TH NOTE> ! DBL-DOT 1.1. .... !
0.1. ..00 ╙INGLE ─OTTED DURATION ! QTR NOTE> ...1 0000 !
1.1. ..00 ─OUBLE ─OTTED DURATION ! !
...0 1000 ╫HOLE NOTE> ! ╘HIS IS A DOUBLE-DOTTED !
...0 1100 ╚ALF ╬OTE> ! QUARTER NOTE WITH TIE. !
...1 0000 ╤UARTER ╬OTE> ----------------------------
...1 0100 ┼IGHTH ╬OTE>
...1 1000 ╙IXTEENTH ╬OTE>
...1 1100 ╘HIRTY-╙ECOND ╬OTE>
*****************************************************************************
* ┬┘╘┼ 2 - ╞╥┼╤╒┼╬├┘ (╨╔╘├╚) ┴╬─ ╥┼╙╘╙ *
*****************************************************************************
7654 3210 ─┼╙├╥╔╨╘╔╧╬ ----------------------------
! !
┬ITS 7 6 ═ODIFIER ! ┼╪┴═╨╠┼ !
11.. .... ╞LATTED ! !
10.. .... ╬ATURAL ! ╟╔╓┼╬ BYTE 2 IS HEX 94 !
01.. .... ╙HARPED ! (BINARY 1001 0100) !
00.. .... ─OUBLE SHARP (╟╞─├) ! !
OR ─OUBLE FLAT (┴┬┼) ! !
! ╬ATURAL 10.. .... !
┬ITS 5 4 3 ╧CTAVE ! ╧CTAVE 5 ..01 0... !
..11 1... ╧CTAVE 0 ! ╞ ╬OTE> .... .100 !
..11 0... ╧CTAVE 1 ----------------------------
..10 1... ╧CTAVE 2
..10 0... ╧CTAVE 3
..01 1... ╧CTAVE 4
..01 0... ╧CTAVE 5
..00 1... ╧CTAVE 6
..00 0... ╧CTAVE 7
┬ITS 2 1 0 ╬OTE
.... .111 ┬ ╬OTE>
.... .110 ┴ ╬OTE>
.... .101 ╟ ╬OTE>
.... .100 ╞ ╬OTE>
.... .011 ┼ ╬OTE>
.... .010 ─ ╬OTE>
.... .001 ├ ╬OTE>
.... .000 ╥EST>
*****************************************************************************
* ├╧══┴╬─ ─┴╘┴ ╨┴╔╥╙ *
*****************************************************************************
├OMMANDS CONTAIN INFORMATION OTHER THAN MUSICAL NOTE PITCH AND DURATION. ╞OR
COMMANDS, THE LOW-ORDER TWO BITS OF THE FIRST BYTE ARE NOT 00. ┴ WHOLE SET OF
COMMANDS ARE IDENTIFIED WITH A FIRST BYTE VALUE OF HEX 01. ╞OR THESE COMMANDS,
THE LOW-ORDER FOUR BITS OF THE SECOND BYTE CAN BE USED AS A GROSS IDENTIFIER,
WHILE THE HIGH ORDER FOUR BITS OFTEN CONTAIN A NUMERIC VALUE. ╘HESE COMMANDS
ARE DESCRIBED BY THEIR SECOND BYTES BELOW:
*****************************************************************************
* ├╧══┴╬─╙ ╫╔╘╚ ╞╔╥╙╘ ┬┘╘┼ = ╚┼╪ 01 *
*****************************************************************************
* ┬┘╘┼2 * ╚┼╪ ├╧══┴╬─ ╓┴╠╒┼
7654 3210 ╬┴═┼
NNNN 0000 N0 ─├┘ ┬ITS 7654 CONTAIN A VALUE, 0-╞
NNNN N001 ╥╒╨ ┬ITS 76543 CONTAIN A VALUE, 0-1╞
NNNN 0010 N2 ├┴╠ ┬ITS 7654 CONTAIN A VALUE, 0-╞
0000 0011 03 ┬═╨ ╒╨
0001 0011 13 ╞╠╘ ╬╧
0010 0011 23 ╥╬╟ ╬╧
0011 0011 33 ╙╬├ ╬╧
0100 0011 43 ╞-╪ ╬╧
1NNN 0011 N3 ─┼╞ ┬ITS 7654 CONTAIN A VALUE, 9-╞, WHICH IS 8
LESS THAN THE TRUE VALUE.
0NNN N100 ┴╘╦ ┬ITS 6543 CONTAIN A VALUE, 0-╞
1NNN N100 ╙╒╙ ┬ITS 6543 CONTAIN A VALUE, 0-╞
0110 0011 63 ╠╞╧ 0
0111 0011 73 ╨&╓ ╬╧
NNNN N101 ╥─╬ ┬ITS 76543 CONTAIN A VALUE, 0-1╞
NNNN 0110 N6 ─┼╞ ┬ITS 7654 CONTAIN A VALUE, 0-╞
NNN0 0111 N7 ╫┴╓ ┬ITS 7 6 5 ╫┴╓┼╞╧╥═
0 0 0 ╬OISE
0 0 1 ╘RIANGLE
0 1 0 ╙AWTOOTH
0 1 1 ╘RIANGLE + ╙AWTOOTH
1 0 0 ╨ULSE
1 0 1 ╨ULSE + ╘RIANGLE
1 1 0 ╨ULSE + ╙AWTOOTH
1 1 1 ╨ULSE + ╘RIANGLE + ╙AWTOOTH
NNN1 0111 N7 ╞-═ ┬ITS 7 6 5 ╞╔╠╘┼╥ ═╧─┼
0 0 0 ╧FF (╬)
0 0 1 ╠OW ╨ASS
0 1 0 ┬AND ╨ASS
0 1 1 ╠OW + ┬AND
1 0 0 ╚IGH ╨ASS
1 0 1 ╚IGH + ╠OW
1 1 0 ╚IGH + ┬AND
1 1 1 ╚IGH + ┬AND + ╠OW
NNNN 1000 N8 ╥╠╙ ┬ITS 7654 CONTAIN A VALUE, 0-╞
NNNN 1010 N┴ ╥┼╙ ┬ITS 7654 CONTAIN A VALUE, 0-╞
0000 1011 0┬ ┬═╨ ─╬ (─OWN)
0001 1011 1┬ ╞╠╘ ┘┼╙
0010 1011 2┬ ╥╬╟ ┘┼╙
0011 1011 3┬ ╙╬├ ┘┼╙
0100 1011 4┬ ╞-╪ ┘┼╙
0101 1011 5┬ 3-╧ ┘┼╙
0110 1011 6┬ ╠╞╧ 1
0111 1011 7┬ ╨&╓ ┘┼╙
1NNN 1011 N┬ ├┴╠ ┬ITS 7654 CONTAIN A VALUE, 9-╞, WHICH IS 8 LESS
THAN THE TRUE VALUE.
NNNN 1110 N┼ ╓╧╠ ┬ITS 7654 CONTAIN A VALUE, 0-╞
0000 1111 0╞ ╘┴╠ ╬/┴
0010 1111 2╞ ┼╬─ ╬/┴
0100 1111 4╞ ╚╠╘ ╬/┴
0NN1 1111 N╞ ╙╥├ ┬ITS 65 CONTAIN A VALUE, 0-2
1NNN 1111 N╞ ─╙╘ ┬ITS 654 CONTAIN A CODED VALUE:
000=0, 010=1, 101=2, 110=3
*****************************************************************************
* ├╧══┴╬─╙ ╫╚╧╙┼ ╞╔╥╙╘ ┬┘╘┼ ╔╙ ╬╧╘ ╚┼╪ 01 *
*****************************************************************************
╘HIS GROUP OF COMMAND PAIRS GENERALLY HAS A FIRST BYTE THAT DEFINES THE
COMMAND, AND THE SECOND BYTE GIVES A NUMERIC VALUE FROM HEX 00 TO ╞╞ (DECIMAL
RANGE 0 TO 255). ╘HERE ARE A FEW VARIATIONS, HOWEVER, WHERE THE VALUE RANGE
EXCEEDS 255 (─╘╬, ╨-╫, ═╙#, ╩╔╞, ╨╧╥), AND WHERE NEGATIVE VALUES MUST BE
AVAILABLE (┴╒╘, ╨-╙, ╘╨╙, ╞-╙, ╙├┴, ╥╘╨, ╩╔╞, AND ─╘╬).
┬┘╘┼1 * ┬┘╘┼2 * ├═─
╚┼╪ 7654 3210 ╬┴═┼ ╓┴╠╒┼
N2 NNNN NNNN ╨-╫ ╘HE 12-BIT NUMBER COMPOSED OF BYTE 1, BITS
7-4, AND ALL 8 BITS OF BYTE 2 GIVE A RANGE
OF 0-4095.
06 NNNN NNNN ╘┼═ ╔F THE SECOND BYTE IS ZERO, IT IS REPLACED
BY 256 (HEX 100). ╘HE SECOND BYTE VALUE IS
THEN DIVIDED INTO 14,400. ╘HE WHOLE NUMBER
QUOTIENT IS THE NUMBER OF QUARTER NOTES
PER MINUTE.
16 NNNN NNNN ╒╘╠ ╙ECOND BYTE IS THE VALUE.
26 NNNN NNNN ╨╬╘ ╙ECOND BYTE IS THE VALUE.
36 NNNN NNNN ╚┼─ ╙ECOND BYTE IS THE VALUE.
46 NNNN NNNN ╞╠╟ ╙ECOND BYTE IS THE VALUE.
56 SNNN NNNN ╨-╙ ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
NUMBER WITH RANGE -128 (HEX 80) TO +127
(HEX 7╞).
66 SNNN NNNN ╞-╙ ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
NUMBER WITH RANGE -128 (HEX 80) TO +127
(HEX 7╞).
6┼ SNNN NNNN ╙├┴ ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
NUMBER WITH RANGE -7 (HEX ╞9) TO 7 (HEX 07).
76 0NNN NNNN ╓─╨ ┬YTE 2 BITS 6-0 CONTAIN THE VALUE, 0-127.
86 NNNN NNNN ╓╥╘ ╙ECOND BYTE IS THE VALUE.
96 SNNN NNNN ┴╒╘ ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
NUMBER WITH RANGE -128 (HEX 80) TO +127
(HEX 7╞).
┴6 HHHH OOOS ╘╨╙ ╘HE SECOND BYTE CONTAINS THE NUMBER OF HALF-
STEPS TO TRANSPOSE, FROM -95 TO +95. ┬IT 0
IS THE SIGN, 0=+, 1=-. ┬ITS 3-1 GIVE THE
NUMBER OF WHOLE OCTAVES FOR NEGATIVE VALUES.
╞OR POSITIVE NUMBERS, THE NUMBER OF OCTAVES
IS 7 MINUS THE NUMBER IN BITS 3-1. ┬ITS 7-4
GIVE THE ADDITIONAL HALF-STEPS LESS THAN AN
OCTAVE (0-11) FOR POSITIVE NUMBERS. ╞OR
NEGATIVE NUMBERS, THE EXCESS HALF-STEPS ARE
11 MINUS THE NUMBER IN BITS 7-4.
┬6 NNNN NNNN ┴╒╪ ╙ECOND BYTE IS THE VALUE.
├6 NNNN NNNN ╨╓─ ╙ECOND BYTE HAS VALUE, 0-127.
─6 NNNN NNNN ╨╓╥ ╙ECOND BYTE HAS VALUE, 0-127.
┼6 NNNN NNNN ═┴╪ ╙ECOND BYTE HAS VALUE, 0-255.
╞6 NNNN NNNN ╒╘╓ ╙ECOND BYTE HAS VALUE, 0-255.
0┼ NNNN NNNN ╞-├ ╙ECOND BYTE IS THE VALUE.
2┼ NNNN NNNN ╥╘╨ ╙ECOND BYTE HAS THE NUMBER OF HALF-STEPS TO
ADJUST, -47 TO +47 WHERE 3 MINUS THE NUMBER
GIVEN BY BITS 210 GIVE THE NUMBER OF WHOLE
OCTAVES, AND BITS 76543 MINUS 11 IS THE
NUMBER OF ADDITIONAL HALF-STEPS LESS THAN
AN OCTAVE.
4┼ NNNN NNNN ╚╠─ ╙ECOND BYTE HAS A VALUE, 0-255.
N┼ NNNN NNNN ═╙# ╘HE 10-BIT NUMBER COMPOSED OF BITS 7-6 OF
THE 1ST BYTE AND ALL 8 BITS OF THE SECOND
BYTE GIVE A VALUE OF 0-1023. ┬ITS 5 AND 4
ARE ALWAYS 01 FOR THIS COMMAND, SO THE FIRST
BYTE MAY BE 1┼, 5┼, 9┼, OR ─┼.
N┼ NNNN NNNN ╩╔╞ ┬ITS 76 OF THE FIRST BYTE ARE APPENDED TO
THE 8 BITS OF THE SECOND BYTE TO FORM A
10-BIT VALUE WITH A RANGE OF -200 TO 757.
┬YTE 1 BITS 54 ARE ALWAYS 11, SO THE FIRST
BYTE MAY BE 3┼, 7┼, ┬┼, OR ╞┼.
N┴ NNNN NNNN ─╘╬ ╘HE 11-BIT NUMBER COMPOSED OF BYTE 1, BITS
7-5 AND ALL 8 BITS OF BYTE 2 PRODUCES A
VALUE OF 0-2047. ╔F BYTE 1, BIT 4 IS 1, THE
NUMBER IS NEGATIVE, AND IS REDUCED BY 2048
FOR AN EFFECTIVE RANGE OF -2048 TO 2047.
NN NNNN NNNN ╨╧╥ ╘HE 14-BIT NUMBER COMPOSED OF BYTE 1, BITS
7-2 AND ALL 8 BITS OF THE SECOND BYTE. ╓ALUE
RANGE IS 16383. ┬ITS 1 AND 0 OF BYTE 1 ARE
ALWAYS 11 FOR THIS COMMAND, ALL OTHER BITS
MAY BE ANY VALUE.